/*
 *  Copyright 2001-2004 The Apache Software Foundation
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package ar.uba.fi.posgrado.common.service;

import ar.uba.fi.posgrado.common.exception.PosgradoException;

/**
 * Servicio que se schedulea.<br>
 * Se configura en Spring que se invocara al unico metodo
 * presente cada un cierto intervalo de tiempo (una vez por 
 * dia seguramente).<br>
 * La manera q se tiene de invocar este job al no tener referencia
 * directa a Quartz es utilizando el mecanismo comentado 
 * {@link http://www.springframework.org/docs/reference/scheduling.html#scheduling-quartz-method-invoking-job aca}
 * 
 * @author nicolas.gonzalez
 */
public interface PosgradoJob {

    /**
     * Metodo que se ejecuta scheduleado.<br>
     * No se arrojan exceptions ya que se invoca por schedule
     * y no es invocado por un cliente normal, sino por Spring.<br>
     * En el caso de algun error se loggea lo ocurrido.<br>
     * La transaccion (JTA) se crea en este servicio, y se propaga
     * a los servicios utilizados.<br> En caso q los servicios fallen entonces
     * falla el job completo como una unidad.<br> 
     * @throws PosgradoException En caso de error
     */
    public void executeJob() throws PosgradoException;
    
}
